package com.cqc.jdk8.Jutil.concurrent.locks.ReadWriteLock;

/**
 * ReadWriteLock，只有有写操作，那么其它线程必须等待；如果全是读，可以共享一个锁，不需要等待
 * 读和读：不互斥；
 * 写和写：互斥
 * 读和写：互斥
 * <p>
 * ReentrantLock 不区分读和写，都会加锁，都需要等待
 * 见 com.cqc.jdk8.Jutil.concurrent.locks.ReentrantLock.demo4
 */
public class ReadWriteLockTest {
    /**
     * 读和读
     * 我们发现 2个线程没以后间隔，也就是说不互斥
     * 2025-6-27 16:58:38,Thread-0
     * 2025-6-27 16:58:38,Thread-1
     */
    public static void main(String[] args) {
        Counter counter = new Counter();
        for (int i = 0; i < 2; i++) {
            new Thread(() -> {
                counter.read();
            }).start();
        }
    }

    /**
     * 写和写
     * 我们发现 2个线程间隔了5s，也就是说被阻塞了。
     * 2025-6-27 16:53:31,Thread-0
     * 2025-6-27 16:53:36,Thread-1
     */
//    public static void main(String[] args) {
//        Counter counter = new Counter();
//        for (int i = 0; i < 2; i++) {
//            new Thread(() -> {
//                counter.write();
//            }).start();
//        }
//    }

    /**
     * 读和写
     * 我们发现 2个线程间隔了5s，也就是说被阻塞了。
     * 2025-6-27 16:56:09,Thread-0
     * 2025-6-27 16:56:14,Thread-1
     */
//    public static void main(String[] args) {
//        Counter counter = new Counter();
//
//        new Thread(() -> {
//            counter.read();
//        }).start();
//        new Thread(() -> {
//            counter.write();
//        }).start();
//    }
}
